home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / xfsl.h < prev    next >
C/C++ Source or Header  |  1996-05-07  |  11KB  |  275 lines

  1. /*  @(#)xfsl.h, Dirk Haun/Stefan Rogel/Christoph Zwerschke, 21.07.1995
  2.  *  @(#)Aufruf eines systemweiten Fontselektors über den Cookie 'xFSL'
  3.  *
  4.  *  Revision 4 vom 21.07.1995
  5.  *
  6.  */
  7.  
  8. #include <portab.h>
  9.  
  10. #if !defined(__xFSL__)
  11. #define __xFSL__
  12.  
  13. #if !defined(__AES__)
  14. #include <aes.h>
  15. #endif
  16.  
  17. #if !defined(__VDI__)
  18. #include <vdi.h>
  19. #endif
  20.  
  21. #define xFSL_REVISION  4
  22.  
  23.  
  24. /******** verwendete Strukturen ******************************************/
  25.  
  26. /*  Neuer Typ für Fontgröße in 1/65536 Punkt, gültig ab Speedo 4.0
  27.  *
  28.  *  typedef LONG    fix31;
  29.  */
  30.  
  31. /*  Angabe der Fontgröße,
  32.  *  wird über ein Kontrollflag (s.u.) unterschieden
  33.  */
  34.  
  35. union fsize
  36. {
  37.     WORD    size;            /* Fontgröße in Punkt */
  38.     fix31    size31;        /* Fontgröße in 1/65536 Punkt */
  39. };
  40.  
  41.  
  42. /*  allgemeine Fontinfo-Struktur
  43.  */
  44.  
  45. typedef struct
  46. {
  47.      WORD              fontid;         /* ID des Fonts                                      */
  48.      WORD              fonttype;        /* Typ des Fonts, siehe vqt_info()              */
  49.  UBYTE           *fontname;      /* Name des Fonts, siehe vqt_name()             */
  50.  union fsize    fontsize;      /* Fontgröße in pt oder fix31                     */
  51.  union fsize    fontwidth;      /* Breite in pt oder fix31                         */
  52.  UBYTE             trackkern;      /* Track-Kerning, siehe vst_kern()             */
  53.  UBYTE             pairkern;      /* Paar-Kerning, siehe vst_kern()              */
  54.  WORD              fontattr;        /* Attribute, siehe vst_attributes()          */
  55.  WORD              fontskew;        /* Neigung, siehe vst_skew()                      */
  56.  WORD              fontcol;        /* Farbe, siehe vst_color()                      */
  57.  WORD              backcol;        /* Text-Hintergrundfarbe                            */
  58.  WORD              halign;         /* horizontale Textausrichtung                  */
  59.  WORD              valign;         /* vertikale Textausrichtung                      */
  60.  WORD              rotation;        /* Textrotation in 1/10 Grad                      */
  61.  WORD              validtype;     /* Typ (V_CHAR_...) oder Mapping (MAP_...)  */
  62.  WORD             *validUBYTEs;    /* benötigte Zeichen oder 0L                      */
  63. } PFONTINFO;
  64.  
  65.  
  66. /*  ein Eintrag im Popup
  67.  */
  68.  
  69. typedef struct
  70. {
  71.  UBYTE           *entry;          /* Text des Popup-Eintrags                       */
  72.  PFONTINFO      *fontinfo;      /* Zeiger auf Fontinfo-Struktur                 */
  73.  UWORD  fontflags;     /* erlaubte Fontarten                                */
  74.  LONG             funcflags;      /* Funktionsflags, nur für HuGo!                 */
  75. } xFSL_PENTRY;
  76.  
  77.  
  78. /*  xFSL-Parameter
  79.  */
  80.  
  81. typedef struct
  82. {
  83.  WORD              par_size;        /* Größe der xFSL_PAR-Struktur selbst          */
  84.  WORD              pfi_size;        /* Größe der PFONTINFO-Struktur                  */
  85.  ULONG control;        /* Kontroll-Flags, s.u.                           */
  86.  CONST UBYTE   *headline;      /* Überschrift oder 0L                             */
  87.  CONST UBYTE   *example;       /* Beispieltext oder 0L                             */
  88.  CONST UBYTE   *helptext;      /* Text für den Hilfe-Button oder 0L          */
  89.  PFONTINFO      *font;           /* Zeiger auf Fontinfo, s.o.                     */
  90.  UWORD  fontflags;     /* erlaubte Fontarten                                */
  91.  CONST UBYTE   *poptext;       /* Text vor dem Popup (nur Calvino) oder 0L */
  92.  WORD              num_entries;    /* Anzahl der Einträge (0..n)                    */
  93.  WORD              sel_entry;     /* Selektierter Eintrag (0..n-1)                */
  94.  xFSL_PENTRY  *popup;          /* Zeiger auf ein Popup oder 0L                 */
  95.  UBYTE           *helpinfo;      /* Rückgabe: Zeiger auf Hilfedatei & -seite */
  96. } xFSL_PAR;
  97.  
  98.  
  99. /******** Definition der Schnittstellen-Funktionen ***********************/
  100. /*
  101.  *  xFSL_INPUT xfsl_input      - vereinfachter Aufruf
  102.  *  xFSL_INIT xfsl_init       - Init-Aufruf : Dialog darstellen
  103.  *  xFSL_EVENT xfsl_event      - Event-Aufruf: Hauptschleife
  104.  *  xFSL_EXIT xfsl_exit       - Exit-Aufruf : Dialog abmelden
  105.  *
  106.  */
  107.  
  108. typedef WORD cdecl (*xFSL_INPUT)
  109. (
  110.  WORD              vdihandle,     /* Handle einer geöffneten VDI-Workstation  */
  111.  UWORD  fontflags,     /* Flags, welche Fonts angeboten werden        */
  112.  CONST UBYTE   *headline,      /* Überschrift oder 0L (Default-Text)         */
  113.  WORD             *id,                /* Rückgabe: ID des gewählten Fonts           */
  114.  WORD             *size             /* Rückgabe: Größe des gewählten Fonts       */
  115. );
  116.  
  117. typedef WORD cdecl (*xFSL_INIT)
  118. (
  119.  WORD              vdihandle,     /* Handle einer geöffneten VDI-Workstation  */
  120.  xFSL_PAR      *xpar              /* Struktur mit weiteren Eingabeparametern  */
  121. );
  122.  
  123. typedef WORD cdecl (*xFSL_EVENT)
  124. (
  125.  WORD              xfsl_handle,    /* Handle von xfsl_init()                          */
  126.  EVENT          *event           /* Pure-C-Event-Struktur                          */
  127. );
  128.  
  129. typedef VOID cdecl (*xFSL_EXIT)
  130. (
  131.  WORD              xfsl_handle    /* Handle von xfsl_init()                          */
  132. );
  133.  
  134. typedef LONG cdecl (*xFSL_INFO)
  135. (
  136.  VOID                               /* keine Parameter                                  */
  137. );
  138.  
  139.  
  140. /******** xFSL-Struktur **************************************************/
  141.  
  142. /*  Der Cookie 'xFSL' zeigt auf die folgende Struktur
  143.  */
  144.  
  145. typedef struct
  146. {
  147.     ULONG            xfsl;            /* Magic 'xFSL'                                      */
  148.     UWORD            revision;    /* Revisionsnummer der Schnittstelle          */
  149.     ULONG         product;        /* Kennung des Fontselektors, z.B. 'CLVN'    */
  150.     UWORD            version;        /* Version des Fontselektors als BCD          */
  151.     xFSL_INPUT     fsl_input;  /* einfacher Aufruf                                 */
  152.     xFSL_INIT    xfsl_init;    /* Init-Aufruf                                         */
  153.     xFSL_EVENT     fsl_event;  /* Event-Aufruf                                      */
  154.     xFSL_EXIT    xfsl_exit;    /* Exit-Aufruf                                         */
  155.     xFSL_INFO    xfsl_info;    /* Info-Aufruf (Features abfragen)             */
  156. } xFSL;
  157.  
  158.  
  159. /******** Flags **********************************************************/
  160.  
  161. /*  Fontflags
  162.  */
  163.  
  164. #define FF_SYSTEM         0x0001 /* Systemfont (zusätzlich) anzeigen         */
  165. #define FF_MONOSPACED    0x0002 /* monospaced Fonts anzeigen                  */
  166. #define FF_PROPORTIONAL 0x0004 /* prop. Fonts anzeigen                         */
  167. #define FF_BITMAP         0x0008 /* alle Bitmapfonts anzeigen                  */
  168. #define FF_SPD             0x0010 /* Speedofonts                                     */
  169. #define FF_TTF             0x0020 /* TrueType-Fonts                                 */
  170. #define FF_PFB             0x0040 /* Type-1-Fonts                                     */
  171. #define FF_CFN             0x0080 /* Calamus-Fonts (nicht implementiert!)     */
  172. #define FF_VECTOR       (FF_SPD|FF_TTF|FF_PFB|FF_CFN) /* Vektorfonts anz. */
  173. #define FF_ALL           (FF_MONOSPACED|FF_PROPORTIONAL|FF_VECTOR|FF_BITMAP)
  174. #define FF_CHANGED        0x8000 /* Änderung erfolgt (im Popup)                 */
  175.  
  176. #define FF_VEKTOR         FF_VECTOR
  177. #define FF_MONO            FF_MONOSPACED
  178. #define FF_PROP            FF_PROPORTIONAL
  179.  
  180. /* Kontroll-Flags (werden nicht alle von allen Selektoren unterstützt)     */
  181. #define CC_WINDOW      0x0001 /* Fontselektor als Fenster                      */
  182. #define CC_APPMODAL     0x0002 /* Fontselektor ist applikations-modal         */
  183. #define CC_FIX31         0x0004 /* alle Größenangaben in 1/65536 Point       */
  184. #define CC_FAKESTYLE  0x0008 /* Schnitte simulieren (nur f. Bitmapfonts) */
  185. #define CC_CLOSER      0x0010 /* Fenster mit Closer, kein OK-Button         */
  186. #define CC_NOSIZE      0x0100 /* Größe nicht ändern                              */
  187. #define CC_NOCOLOR     0x0200 /* Farbe nicht ändern                              */
  188. #define CC_NOATTR      0x0400 /* Attribute nicht ändern                         */
  189. #define CC_NOWIDTH     0x0800 /* Breite nicht ändern                             */
  190. #define CC_NOKERN      0x1000 /* Kerning nicht ändern                             */
  191. #define CC_NOSKEW      0x2000 /* Skewing nicht ändern                             */
  192. #define CC_NOALIGN     0x4000 /* Ausrichtung nicht ändern                      */
  193. #define CC_NOROTATION 0x8000 /* Textrotation nicht ändern                     */
  194. #define CC_DFLTSIZE    0x10000 /* Schriftgröße "Default"                         */
  195. #define CC_INVSTYLE    0x20000 /* Attribut "Invers"                                 */
  196.  
  197. /* horizontale Textausrichtung (wie bei vst_alignment)                         */
  198. #define THA_LEFT              0  /* linksbündig                                         */
  199. #define THA_CENTER          1  /* zentriert                                          */
  200. #define THA_RIGHT           2  /* rechtsbündig                                      */
  201.  
  202. /* vertikale Textausrichtung (_nicht_ wie bei vst_alignment!)                 */
  203. #define TVA_BOTTOM          0  /* an der Text-Unterkante                         */
  204. #define TVA_CENTER          1  /* vertikal zentriert                              */
  205. #define TVA_TOP              2  /* an der Text-Oberkante                          */
  206.  
  207. /* Gruppen von erwünschten Zeichen im Font ('validtype' in PFONTINFO)     */
  208. #define V_CHAR_IND         -1  /* "egal"                                              */
  209. #define V_CHAR_ASC         -2  /* alle druckbaren ASCII-Zeichen (32-126)     */
  210. #define V_CHAR_PRT         -3  /* alle druckbaren Zeichen (32-255)             */
  211. #define V_CHAR_ALL         -4  /* wirklich alle Zeichen (0-255)                 */
  212.  
  213. /* Mapping (ebenfalls für 'validtype' in PFONTINFO)                             */
  214. #define MAP_DIRECT          0  /* "direktes" Mapping (alle Zeichen)          */
  215. #define MAP_ASCII           1  /* ASCII-Mapping, Bereich 0..255 (Default)  */
  216.  
  217. /* Fonttypen (erweitertes vqt_name ab SpeedoGDOS 5.0c/NVDI 3)                 */
  218. #define UNKNOWN_FONT 0x0000  /* Fonttyp unbekannt                                 */
  219. #define BITMAP_FONT    0x0001  /* Bitmapfont                                         */
  220. #define SPEEDO_FONT    0x0002  /* Speedofont                                         */
  221. #define TT_FONT        0x0004  /* TrueType-Font                                     */
  222. #define PFB_FONT        0x0008  /* Type-1-Font (Postscript)                      */
  223. #define CFN_FONT        0x0010  /* Calamus-Font (nicht implementiert!)         */
  224. #define ANY_FONT        0x00FF  /* als Maske (Hibyte ausmaskieren)             */
  225.  
  226.  
  227. /*  Featureflags für xfsl_info
  228.  */
  229. #define XF_SIZE        0x0001  /* Größenänderung möglich                         */
  230. #define XF_COLOR        0x0002  /* Farbänderung möglich                             */
  231. #define XF_ATTR        0x0004  /* Attributänderung möglich                      */
  232. #define XF_WIDTH        0x0008  /* Breitenänderung möglich                         */
  233. #define XF_KERN        0x0010  /* Kerningänderung möglich                         */
  234. #define XF_SKEW        0x0020  /* Neigungsänderung möglich                      */
  235. #define XF_ALIGN        0x0040  /* Änderung der Ausrichtung möglich             */
  236. #define XF_ROTATION    0x0080  /* Textrotation möglich                             */
  237. #define XF_FIX31        0x0100  /* fix31-Unterstützung                             */
  238. #define XF_POPUP        0x0200  /* Popup-Unterstützung                             */
  239. #define XF_DRAGDROP    0x0400  /* Drag&Drop-Unterstützung                         */
  240. #define XF_MAPPING    0x0800  /* beherrscht Mapping                              */
  241.  
  242.  
  243. /*  Returncodes der xfsl_xxx-Aufrufe
  244.  *  (aufwärtskompatibel zu den UFSL-Rückgabewerten [markiert mit 'U'])
  245.  */
  246.  
  247. #define xFS_PARERROR      -9  /* Parameterfehler, z.B. Aufruf nach Rev. 3 */
  248. #define xFS_LOADERROR     -8  /* Fehler beim Nachladen des Overlays         */
  249. #define xFS_RES_ERROR     -7  /* Auflösung kleiner als 640*400 Punkte      */
  250. #define xFS_NO_HANDLE     -6  /* Kein Handle frei                                 */
  251. #define xFS_NO_WINDOW     -5  /* Kein Fenster frei                                 */
  252. #define xFS_NO_FONTS      -4  /* Keine Fonts geladen                          U */
  253. #define xFS_NO_FONTSIZE  -3  /* Fontgröße nicht identifizierbar          U */
  254. #define xFS_ACTIVE         -2  /* Fontselektor ist bereits aktiv           U */
  255. #define xFS_ERROR          -1  /* allgemeiner Fehler (Speichermangel)      U */
  256. #define xFS_STOP              0  /* <Abbruch> gewählt                              U */
  257. #define xFS_OK               1  /* <Ok> gewählt                                   U */
  258. #define xFS_HELP              2  /* Hilfe-Button angewählt                         */
  259. #define xFS_EVENT           3  /* AES-Event aufgetreten                          */
  260. #define xFS_POPUP           4  /* das User-Popup wurde angewählt              */
  261.  
  262.  
  263. /*  Schriftbreiten-Informationsstruktur,
  264.  *  wird nur für das Font-Protokoll (Nachricht XFONT_CHANGED) benötigt
  265.  */
  266.  
  267. typedef struct
  268. {
  269.   UWORD pair  : 1;     /* Pair-Kerning (0=nein, 1=ja)                    */
  270.   UWORD track : 2;     /* Tr.-K. (0=ohne,1=norm.,2=eng,3=sehr eng) */
  271.   UWORD width : 13;     /* Schriftbreite in pt (0..8191)                */
  272. } FW_INFO;
  273.  
  274. #endif
  275.